/**
 * Fichier permettant la gestion des etats avec un type generique
 * Les etats sont ainsi consideres independamment de leurs specificites
 * @date 08.05.2011
 * @author Amirouche HALFAOUI
 */

#ifndef STATE_H
#define STATE_H

/**
 * Un etat du jeu
 */
typedef struct State {
	
	/** Environnement associe a l'etat en cours de l'application */
	void * env; 
	
	/** Fonction d'initialisation de l'etat courant */
	void (*init_handler)(void); 
	
	/**
	 * Fonction qui fait les calculs et provoque l'affichage de l'etat courant
	 * @param env Environnement attache a l'etat
	 */
	void (*main_handler)(void);
	
	/**
	 * Fonction de gestion des evenements de l'etat courant
	 * @param env Environnement attache a l'etat
	 */
	void (*event_key)(unsigned char key, int x, int y);
	
	void (*event_special)(int key, int x, int y);
	
	/**
	 * Fonction appelee au redimensionnement de la fenetre
	 * @param env Reference vers l'environnement attache a l'etat menu
	 * @param width Nouvelle largeur de la fenetre
	 * @param height Nouvelle hauteur de la fenetre
	 */
	void (*resize)(int width, int height);
	
} State;

#endif